package Creational

// 简单工厂模式就是通过类型将一个工厂干很多活
// 通过传入不同的类型，让工厂去创建不同的对象
// 优点： 适合小型项目，适合创建对象比较简单的场景
// 缺点： 不符合开闭原则，不适合后期作扩展

type Pay interface {
	Pay(money int)
}

type AliPay struct {
}

type WechatPay struct {
}

func (a *AliPay) Pay(money int) {
	println("支付宝支付")
}
func (w *WechatPay) Pay(money int) {
	println("微信支付")
}

type PayType int

const (
	AliPayType PayType = iota
	WechatPayType
)

func NewPay(payType PayType) Pay {
	switch payType {
	case AliPayType:
		return &AliPay{}
	case WechatPayType:
		return &WechatPay{}
	default:
		return nil
	}
}
